import os  # Для запуска команд
import time  # Заствялем программу зависнуть

# Вы можeте изменить иконки на свои любые,
# ГЛАВНОЕ они должы находится в домашнем каталоге с запускаемым файлом
file_icon_path_1 = "linux.png"
file_icon_path_2 = "shutdown.png"

# Переменная отвечающая за последнее отправленное сообщение
# Чтобы небыло большого кол-ва уведомлений
last_notification = None

# Переменные отвечающие за работу условий в определённых промежутках
battery_int_if1 = 30  # 1 условие, 25-30% заряда
battery_int_if2 = 25  # 2 условие, 20-24% заряда
battery_int_if3 = 20  # 3 условие, 12-19% заряда
battery_int_if4 = 12  # 4 условие, <12% заряда

while True:
    # Выполняем команду acpi -b и считываем вывод
    acpi_command_battery = os.popen("acpi -b").read()
    acpi_command_lines = acpi_command_battery.splitlines()

    # Получаем процент заряда из вывода acpi
    battery = int(acpi_command_lines[0].split(", ")[1].split("%")[0])

    # Узнаём заряжается ли батарея или нет
    charging_discharging = acpi_command_lines[0].split(" ")[2][:-1]

    if battery > battery_int_if1:
        last_notification = None
    elif (
        # 1 условие
        battery >= battery_int_if2
        and battery <= battery_int_if1
        and last_notification != f"{battery_int_if1}%"
        and charging_discharging == "Discharging"
    ):
        last_notification = f"{battery_int_if1}%"

        # Если заряд менее 30%, выполнить определенную команду
        os.system(
            f"dunstify -a Battery_Check --icon $(pwd)/{file_icon_path_1} 'Внимание! У вас отсалось <{battery_int_if1}%! Может подзарядить ноутбук?'"
        )
    elif (
        # 2 условие
        battery >= battery_int_if3
        and battery < battery_int_if2
        and last_notification != f"{battery_int_if2}%"
        and charging_discharging == "Discharging"
    ):
        last_notification = f"{battery_int_if2}%"

        os.system(
            f"dunstify -u critical -a Battery_Check --icon $(pwd)/{file_icon_path_1} 'Внимание! У вас отсалось <{battery_int_if2}%! Может подзарядить ноутбук?'"
        )
    elif (
        # 3 условие
        battery >= battery_int_if4
        and battery < battery_int_if3
        and last_notification != f"{battery_int_if3}%"
        and charging_discharging == "Discharging"
    ):
        last_notification = f"{battery_int_if3}%"
        for i in range(0, 3):
            os.system(
                f"dunstify -u critical -a Battery_Check --icon $(pwd)/{file_icon_path_1} 'Внимание! У вас отсалось <{battery_int_if3}%! Может подзарядить ноутбук?'"
            )
    elif (
        # 4 условие
        battery < battery_int_if4
        and last_notification != f"{battery_int_if4}%"
        and charging_discharging == "Discharging"
    ):
        last_notification = f"{battery_int_if4}%"

        for i in range(0, 3):
            os.system(
                f"dunstify -u critical -a Battery_Check --icon $(pwd)/{file_icon_path_2} 'ТРЕВОГА! У вас отсалось <{battery_int_if4}%!!! Выключайте систему или подключите питание!'"
            )
        # Если заряд менее 8%, выполнить команду для выключения
        os.system("kitty --hold sudo poweroff")

    time.sleep(12)  # Спим 12 секунд
